#!/usr/bin/php
<?php
set_time_limit(0);

require_once __DIR__ . DIRECTORY_SEPARATOR . "init.php";

/* 当前时间 */
$datetime = date('Y-m-d H:i:s');

/* 判断cdn_log_dir */
if (!isset($config->cdn_log_dir) || empty($config->cdn_log_dir)) {
    exit('[' . $datetime . ']' . ' ERROR: 缺少配置项cdn_log_dir或cdn_log_dir为空！' . PHP_EOL);
}

/* 判断log_start_time */
if (!isset($config->log_start_time) || empty($config->log_start_time)) {
    exit('[' . $datetime . ']' . ' ERROR: 缺少配置项log_start_time或log_start_time为空！' . PHP_EOL);
}

/* 判断log_end_time */
if (!isset($config->log_end_time) || empty($config->log_end_time)) {
    exit('[' . $datetime . ']' . ' ERROR: 缺少配置项log_end_time或log_end_time为空！' . PHP_EOL);
}

/* 判断cdn_host */
if (!isset($config->cdn_host) || empty($config->cdn_host)) {
    exit('[' . $datetime . ']' . ' ERROR: 缺少配置项cdn_host或cdn_host为空！' . PHP_EOL);
}

if (!initRemoteDBConn()) {
    exit('[' . $datetime . ']' . ' ERROR: Initialize remotedb connect error!' . PHP_EOL);
}

$start_time = $config->log_start_time;
$end_time = $config->log_end_time;
/* 当前时间前两个小时 */
//$end_time = date('YmdHis', strtotime('-2 hours'));

/* 拼接日志名称 */
$log_name = getLogName($start_time, $end_time);
if (!$log_name) {
	return false;
}

$log_link = getLogLink($log_name);
if (!$log_link) {
	return false;
}

foreach ($log_link as $key => $value) {
	if (!$value) {
		continue;
	}

	$date = substr($key, 0, 8);

	$file_dir = $config->cdn_log_dir . '/' . $date;

	$file_path = $config->cdn_log_dir . '/' . $date . '/' . $key;

	$rename = $config->cdn_log_dir . '/' . $date . '/' . $key . '.gz';

	if (!file_exists($file_path)) {
		is_dir($file_dir) or mkdir($file_dir, 0700);
		exec("wget -c -t 10 -T 60 -P '$file_dir' -O '$rename' '$value'");
		exec("gzip -d '$rename'");
		exec("split -l 5000000 '$file_path' -d '$file_path.'");
	}
}

exit('[' . $datetime . ']' . ' MSG: cdn-log-download.php complete!' . PHP_EOL);
/**
 * 获取配置时间段的log名称
 * @param  [string] $start_time [开始时间]
 * @param  [string] $end_time [截至时间]
 * @return [array] [data array]
 */
function getLogName($start_time, $end_time) {
    global $config;
    $hours = [];
    $stime = strtotime($start_time);
    $etime = strtotime($end_time);
    while ($stime < $etime) {
        $hours[] = substr($start_time, 0, -4) . '-' . $config->cdn_host;
        $stime = $stime + 3600;
        $start_time = date('YmdHis', $stime);
    }

    return $hours;
}

/**
 * 从redis中获取日志下载链接
 * @param  [array] $log_name [日志列表]
 * @return [array] [data array]
 */
function getLogLink($log_name) {
	global $config;
	if (!$log_name) {
		return false;
	}
	$redisKey = 'cdn:generateLogList';
	return $config->remotedb->conn->hmget($redisKey, $log_name);
}
?>